/**
	\file mine.h	
	\author Romain Montero, Yann M Yemvula
	\brief module permettant la gestion d'une case
 */
#ifndef _MINE_H
#define _MINE_H

/*! TRUE pour  vrai qui vaut 1*/
#define TRUE 1
/*! FALSE pour faux qui vaut 0*/
#define FALSE 0

/**
	\struct  sCase
	\brief cree la case (cellule)
 */
struct sCase
{
	/*! ce champ indique le nombre de bombes aux alentours case (cellule)*/
	int valeur;
	/*! ce champ indique la decouverte ou non d'une case (cellule) */
	int decouverte; /* utilise comme booleen */
	/*! ce champ indique que la case (cellule) est un drapeau*/
	int drapeau; /* utilise comme booleen */
};
/*!
	cree un type pour sCase
 */
typedef struct sCase Case;

/**
	\brief 
	Fonction getValeur
	cette fonction retourne la valeur d'une case (cellule)
	\fn getValeur(const Case c)
	\param[in] c la case
	\return la valeur d'une case
 */
int getValeur(const Case c);

/**
	\brief
	Procedure setValeur
	cette procedure modifie la valeur d'une case (cellule)
	\fn setValeur(Case *c, int valeur)
	\param[in, out] c la case (cellule)
	\param[in] valeur la valeur
 */
void setValeur(Case * c, int valeur);

/**
	\brief
	Fonction estDecouverte
	cette fonction retourne  vrai si la case (cellule) est decouverte
	\fn estDecouverte(const Case c)
	\param[in] c la case
 */
int estDecouverte(const Case c);

/**
	\brief
	Procedure setDecouverte
	cette procedure  modifie la case (cellule)
	\fn setDecouverte(Case *c, int decouverte)
	\param[in, out] c la case
	\param[in] decouverte le booleen
 */
void setDecouverte(Case * c, int decouverte);

/**
	\brief
	Procedure initCase
	cette procedure initialise une case 
	\fn initCase(Case *c)
	\param[in, out] c la case (cellule)
 */
void initCase(Case *c);

/**
	\brief
	Procedure incrementerCase
	cette procedure incremente la case (cellule)
	\fn void incrementerCase(Case *c)
	\param[in, out] c la case (cellule)
 */
void incrementerCase(Case * c);

/**
	\brief
	Fonction drapeauPresent
	cette fonction retourne vrai si une drapeau est present sur la case (cellule)
	\fn int drapeauPresent(Case c)
	\param[in] c la case
 */
int drapeauPresent(Case c);

/**
	\brief
	Procedure poserDrapeau
	cette procedure pose un drapeau sur la case (cellule)
	\fn void poserDrapeau(Case *c)
	\param[in, out] c la case (cellule)
 */
void poserDrapeau(Case *c);

/**
	\brief
	Procedure retirerDrapeau
	cette procedure retire le drapeau sur la case (cellule)
	\fn void retirerDrapeau(Case *c)
	\param[in, out] c la case
 */
void retirerDrapeau(Case *c);


#endif
